/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.sadhar.sipp.perekamananggaranbiayarapatkerja;

import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.sadhar.errhandler.ClassAntiNull;
import org.sadhar.sia.common.ClassSession;
import org.sadhar.sia.framework.ClassApplicationModule;
import org.sadhar.sipp.barang.Barang;
import org.sadhar.sipp.barang.BarangDAO;
import org.sadhar.sipp.barang.BarangDAOImpl;
import org.sadhar.sipp.itembiaya.ItemBiaya;
import org.sadhar.sipp.itembiaya.ItemBiayaDAO;
import org.sadhar.sipp.itembiaya.ItemBiayaDAOImpl;
import org.sadhar.sipp.plafon.PlafonDAO;
import org.sadhar.sipp.plafon.PlafonDAOImpl;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.Session;
import org.zkoss.zk.ui.Sessions;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zul.Button;
import org.zkoss.zul.Checkbox;
import org.zkoss.zul.Doublebox;
import org.zkoss.zul.Groupbox;
import org.zkoss.zul.Hbox;
import org.zkoss.zul.Intbox;
import org.zkoss.zul.Label;
import org.zkoss.zul.Listbox;
import org.zkoss.zul.Listcell;
import org.zkoss.zul.Listitem;
import org.zkoss.zul.Messagebox;
import org.zkoss.zul.Radio;
import org.zkoss.zul.Textbox;
import org.zkoss.zul.Toolbarbutton;
import org.zkoss.zul.Window;

/**
 *
 * @author Yohan Hardinugroho
 */
public class PerekamanAnggaranBiayaRapatKerjaWnd extends ClassApplicationModule {

    private Label lblTahunAnggaran;
    private Radio rdAwal;
    private Radio rdRevisi;
    private Textbox txtboxTotalPlafon;
    private Textbox txtboxSisaPlafon;
    private Toolbarbutton toolbarbtnLihatRAB;
    private Listbox lstboxDaftarRapatKerja;
    private Label lblKodeRapatKerja;
    private Label lblNamaRapatKerja;
    private Label lblJenisRapatKerja;
    private Textbox txtboxPosBiayaSearch;
    private Button btnCariPosBiaya;
    private Textbox txtboxIdPosBiaya;
    private Label lblPosBiaya;
    private Checkbox chboxIsUpdate;
    private Textbox txtboxJenisSearch;
    private Button btnCariJenis;
    private Textbox txtboxIdJenis;
    private Textbox txtboxItemBiayaSearch;
    private Button btnCariItemBiaya;
    private Textbox txtboxIdItemBiaya;
    private Label lblItemBiaya;
    private Doublebox txtboxHarga;
    private Label lblSatuan;
    private Intbox txtboxKuantitas;
    private Intbox txtboxJumlahHari;
    private Label lblTotalBiaya;
    private Button btnSimpan;
    private Button btnBatal;
    private Textbox txtboxJumlahAnggaran;
    private Label lblIdAnggaran;
    private Listbox lstboxAnggaranBiayaRapatKerjaByRapatKerja;
    private Listbox lstboxAnggaranBiayaRapatKerja;
    private Textbox txtboxTotalAnggaranBiayaRapatKerja;
    private Listbox lstboxAnggaranBiayaRapatKerjaAwal;
    private Textbox txtboxTotalAnggaranBiayaRapatKerjaAwal;
    private Listbox lstboxAnggaranBiayaRapatKerjaRevisi;
    private Textbox txtboxTotalAnggaranBiayaRapatKerjaRevisi;
    private Button btnKirim;
    private Groupbox grpboxRevisi;
    private Groupbox grpboxAwal;
    private boolean isDikunci = false;
    private ClassSession session;
    private PerekamanAnggaranBiayaRapatKerjaDAO perekamanAnggaranBiayaRapatKerjaDAO;
    private PlafonDAO plafonDAO;
    private DecimalFormat decimalFormat = new DecimalFormat("#,##0.0");
    private Textbox txtboxNamaTableItemPosBiaya;
    private BarangDAO brgDAO = new BarangDAOImpl();
    private ItemBiayaDAO itemDAO = new ItemBiayaDAOImpl();
    private Session sesi;

    public PerekamanAnggaranBiayaRapatKerjaWnd() {
        sesi = Sessions.getCurrent();
        session = (ClassSession) sesi.getAttribute("CURRENT_SESSION");
        perekamanAnggaranBiayaRapatKerjaDAO = new PerekamanAnggaranBiayaRapatKerjaDAOImpl();
    }

    public void onCreate() throws Exception {
        lblTahunAnggaran = (Label) getFellow("lblTahunAnggaran");
        rdAwal = (Radio) getFellow("rdAwal");
        rdRevisi = (Radio) getFellow("rdRevisi");
        lblIdAnggaran = (Label) getFellow("lblIdAnggaran");
        txtboxTotalPlafon = (Textbox) getFellow("txtboxTotalPlafon");
        txtboxSisaPlafon = (Textbox) getFellow("txtboxSisaPlafon");
        toolbarbtnLihatRAB = (Toolbarbutton) getFellow("toolbarbtnLihatRAB");
        lstboxDaftarRapatKerja = (Listbox) getFellow("lstboxDaftarRapatKerja");
        lblKodeRapatKerja = (Label) getFellow("lblKodeRapatKerja");
        lblNamaRapatKerja = (Label) getFellow("lblNamaRapatKerja");
        lblJenisRapatKerja = (Label) getFellow("lblJenisRapatKerja");
        txtboxPosBiayaSearch = (Textbox) getFellow("txtboxPosBiayaSearch");
        btnCariPosBiaya = (Button) getFellow("btnCariPosBiaya");
        txtboxIdPosBiaya = (Textbox) getFellow("txtboxIdPosBiaya");
        lblPosBiaya = (Label) getFellow("lblPosBiaya");
        txtboxJenisSearch = (Textbox) getFellow("txtboxJenisSearch");
        btnCariJenis = (Button) getFellow("btnCariJenis");
        txtboxIdJenis = (Textbox) getFellow("txtboxIdJenis");
        txtboxItemBiayaSearch = (Textbox) getFellow("txtboxItemBiayaSearch");
        btnCariItemBiaya = (Button) getFellow("btnCariItemBiaya");
        txtboxIdItemBiaya = (Textbox) getFellow("txtboxIdItemBiaya");
        txtboxIdItemBiaya.setValue("-1");
        chboxIsUpdate = (Checkbox) getFellow("chboxIsUpdate");
        lblItemBiaya = (Label) getFellow("lblItemBiaya");
        txtboxHarga = (Doublebox) getFellow("txtboxHarga");
        lblSatuan = (Label) getFellow("lblSatuan");
        txtboxKuantitas = (Intbox) getFellow("txtboxKuantitas");
        txtboxJumlahHari = (Intbox) getFellow("txtboxJumlahHari");
        lblTotalBiaya = (Label) getFellow("lblTotalBiaya");
        btnSimpan = (Button) getFellow("btnSimpan");
        btnBatal = (Button) getFellow("btnBatal");
        lstboxAnggaranBiayaRapatKerjaAwal = (Listbox) getFellow("lstboxAnggaranBiayaRapatKerjaAwal");
        txtboxTotalAnggaranBiayaRapatKerjaAwal = (Textbox) getFellow("txtboxTotalAnggaranBiayaRapatKerjaAwal");
        lstboxAnggaranBiayaRapatKerjaRevisi = (Listbox) getFellow("lstboxAnggaranBiayaRapatKerjaRevisi");
        txtboxTotalAnggaranBiayaRapatKerjaRevisi = (Textbox) getFellow("txtboxTotalAnggaranBiayaRapatKerjaRevisi");
        grpboxRevisi = (Groupbox) getFellow("grpboxRevisi");
        grpboxAwal = (Groupbox) getFellow("grpboxAwal");
        txtboxJumlahAnggaran = (Textbox) getFellow("txtboxJumlahAnggaran");
        lstboxAnggaranBiayaRapatKerja = (Listbox) getFellow("lstboxAnggaranBiayaRapatKerja");
        lstboxAnggaranBiayaRapatKerjaByRapatKerja = (Listbox) getFellow("lstboxAnggaranBiayaRapatKerjaByRapatKerja");
        txtboxTotalAnggaranBiayaRapatKerja = (Textbox) getFellow("txtboxTotalAnggaranBiayaRapatKerja");
        txtboxNamaTableItemPosBiaya = (Textbox) getFellow("txtboxNamaTableItemPosBiaya");
        btnKirim = (Button) getFellow("btnKirim");
        plafonDAO = new PlafonDAOImpl();

        readyState();
        clear();
        setDikunci();
        setStatusPengajuan();
        setSisaPlafon();
        loadLstboxDaftarRapatKerja();
        loadLstboxAnggaranBiayaRapatKerja();
    }

    public void readyState() {
    }

    public void clear() throws Exception {
        txtboxJenisSearch.setValue("");
        txtboxIdJenis.setValue("-1");
        txtboxItemBiayaSearch.setValue("");
        lblItemBiaya.setValue("");
        txtboxIdItemBiaya.setValue("-1");
        txtboxHarga.setValue(0d);
        txtboxKuantitas.setValue(0);
        txtboxJumlahHari.setValue(0);
        lblTotalBiaya.setValue("");
    }

    public void setStatusPengajuan() throws Exception {
        String tahun = session.getThnAnggaran();
        String kodeUnit = session.getKodeUnit();
        lblTahunAnggaran.setValue(tahun);
        List<Map> lmap = perekamanAnggaranBiayaRapatKerjaDAO.listStatusPengajuan(tahun, kodeUnit);

        if (lmap.size() <= 0) {
            rdAwal.setSelected(true);
            rdRevisi.setSelected(false);
        } else {
            boolean isAwal = false;
            for (Map m : lmap) {
                if (m.get("isRevisi").toString().equalsIgnoreCase("N") && m.get("isSudahDiajukan").toString().equalsIgnoreCase("N")) {
                    isAwal = true;
                    break;
                } else if (m.get("isRevisi").toString().equalsIgnoreCase("N") && m.get("isSudahDiajukan").toString().equalsIgnoreCase("Y")) {
                    isAwal = false;
                    break;
                }
            }
            if (isAwal) {
                rdAwal.setChecked(true);
                rdRevisi.setChecked(false);
            } else {
                rdAwal.setChecked(false);
                rdRevisi.setChecked(true);
            }
        }
        boolean statusPengajuanAwal = rdAwal.isChecked();
        if (statusPengajuanAwal) {
            grpboxAwal.setVisible(true);
            grpboxRevisi.setVisible(false);
        } else {
            grpboxAwal.setVisible(false);
            grpboxRevisi.setVisible(true);
        }
    }

    public void rdOnCheck() throws Exception {
        setDikunci();
        boolean statusPengajuanAwal = rdAwal.isChecked();
        if (statusPengajuanAwal) {
            grpboxAwal.setVisible(true);
            grpboxRevisi.setVisible(false);
        } else {
            grpboxAwal.setVisible(false);
            grpboxRevisi.setVisible(true);
        }
        loadLstboxAnggaranBiayaRapatKerja();
        loadLstboxAnggaranBiayaRapatKerjaByRapatKerja();
    }

    public void setSisaPlafon() throws Exception {
        // lblTahunAnggaran.setValue(ClassSession.getInstance().getTahunAkademik());
        String tahun = session.getThnAnggaran();
        String kodeUnit = session.getKodeUnit();
        lblTahunAnggaran.setValue(tahun);
        isDikunci = false;

        double totalPlafon = 0.0d;

        List<Map> lplafon = plafonDAO.listPlafon(tahun, kodeUnit, 1);
        for (Map m : lplafon) {
            DecimalFormat df = new DecimalFormat("##,##0.0");
            totalPlafon = ClassAntiNull.AntiNullDouble(m.get("totalPlafon"));
            txtboxTotalPlafon.setValue(df.format(totalPlafon));
        }

        double totalAnggaranNonRapat = 0.0d;
        List<Map> lmap = perekamanAnggaranBiayaRapatKerjaDAO.listStatusPengajuan(tahun, kodeUnit);

        if (lmap.size() == 0) {
            totalAnggaranNonRapat = 0.0d;
        } else {
            List<Map> lMap2 = perekamanAnggaranBiayaRapatKerjaDAO.listStatusPengajuan2(tahun, kodeUnit, "Y", "Y");
            if (lMap2.size() > 0) {
                totalAnggaranNonRapat = perekamanAnggaranBiayaRapatKerjaDAO.totalAnggaranNonRapat(tahun, kodeUnit, "Y", "Y");
            } else {
                List<Map> lMap3 = perekamanAnggaranBiayaRapatKerjaDAO.listStatusPengajuan2(tahun, kodeUnit, "Y", "N");
                if (lMap3.size() > 0) {
                    totalAnggaranNonRapat = perekamanAnggaranBiayaRapatKerjaDAO.totalAnggaranNonRapat(tahun, kodeUnit, "Y", "N");
                } else {
                    List<Map> lMap4 = perekamanAnggaranBiayaRapatKerjaDAO.listStatusPengajuan2(tahun, kodeUnit, "N", "Y");
                    if (lMap4.size() > 0) {
                        totalAnggaranNonRapat = perekamanAnggaranBiayaRapatKerjaDAO.totalAnggaranNonRapat(tahun, kodeUnit, "N", "Y");
                    } else {
                        List<Map> lMap5 = perekamanAnggaranBiayaRapatKerjaDAO.listStatusPengajuan2(tahun, kodeUnit, "N", "N");
                        if (lMap5.size() > 0) {
                            totalAnggaranNonRapat = perekamanAnggaranBiayaRapatKerjaDAO.totalAnggaranNonRapat(tahun, kodeUnit, "N", "N");
                        } else {
                            totalAnggaranNonRapat = 0;
                        }
                    }
                }
            }
//            for (Map m : lmap) {
//                String isRevisi = ClassAntiNull.AntiNullString(m.get("isRevisi"));
//                String isSudahDiajukan = ClassAntiNull.AntiNullString(m.get("isSudahDiajukan"));
//                if (isRevisi.equalsIgnoreCase("Y") && isSudahDiajukan.equalsIgnoreCase("Y")) {
//
//                    break;
//                } else if (isRevisi.equalsIgnoreCase("Y") && isSudahDiajukan.equalsIgnoreCase("N")) {
//                    totalAnggaranNonRapat = perekamanAnggaranBiayaRapatKerjaDAO.totalAnggaranNonRapat(tahun, kodeUnit, "Y", "N");
//                    break;
//                } else if (isRevisi.equalsIgnoreCase("N") && isSudahDiajukan.equalsIgnoreCase("Y")) {
//                    totalAnggaranNonRapat = perekamanAnggaranBiayaRapatKerjaDAO.totalAnggaranNonRapat(tahun, kodeUnit, "N", "Y");
//                    break;
//                } else if (isRevisi.equalsIgnoreCase("N") && isSudahDiajukan.equalsIgnoreCase("N")) {
//                    totalAnggaranNonRapat = perekamanAnggaranBiayaRapatKerjaDAO.totalAnggaranNonRapat(tahun, kodeUnit, "N", "N");
//                    break;
//                }
//            }

        }

        List<Map> listAnggaranRapat = perekamanAnggaranBiayaRapatKerjaDAO.listAnggaranBiayaRapatKerja("Y", tahun, kodeUnit);


        double totalAnggaranRapat = 0.0d;
        if (listAnggaranRapat.size() == 0) {
            totalAnggaranRapat = 0.0d;
        } else {
            List<Map> lMap2 = perekamanAnggaranBiayaRapatKerjaDAO.listAnggaranBiayaRapatKerja2("Y", tahun, kodeUnit, "Y", "Y");
            if (lMap2.size() > 0) {
                totalAnggaranRapat = perekamanAnggaranBiayaRapatKerjaDAO.totalAnggaranRapat(tahun, kodeUnit, "Y", "Y");
            } else {
                List<Map> lMap3 = perekamanAnggaranBiayaRapatKerjaDAO.listAnggaranBiayaRapatKerja2("Y", tahun, kodeUnit, "Y", "N");
                if (lMap3.size() > 0) {
                    totalAnggaranRapat = perekamanAnggaranBiayaRapatKerjaDAO.totalAnggaranRapat(tahun, kodeUnit, "Y", "N");
                } else {
                    List<Map> lMap4 = perekamanAnggaranBiayaRapatKerjaDAO.listAnggaranBiayaRapatKerja2("Y", tahun, kodeUnit, "N", "Y");
                    if (lMap4.size() > 0) {
                        totalAnggaranRapat = perekamanAnggaranBiayaRapatKerjaDAO.totalAnggaranRapat(tahun, kodeUnit, "N", "Y");
                    } else {
                        List<Map> lMap5 = perekamanAnggaranBiayaRapatKerjaDAO.listAnggaranBiayaRapatKerja2("Y", tahun, kodeUnit, "N", "N");
                        if (lMap5.size() > 0) {
                            totalAnggaranRapat = perekamanAnggaranBiayaRapatKerjaDAO.totalAnggaranRapat(tahun, kodeUnit, "N", "N");
                        } else {
                            totalAnggaranRapat = 0;
                        }
                    }
                }
            }
//
//            for (Map m : lmap) {
//                String isRevisi = ClassAntiNull.AntiNullString(m.get("isRevisi"));
//                String isSudahDiajukan = ClassAntiNull.AntiNullString(m.get("isSudahDiajukan"));
//                if (isRevisi.equalsIgnoreCase("Y") && isSudahDiajukan.equalsIgnoreCase("Y")) {
//                    totalAnggaranRapat = perekamanAnggaranBiayaRapatKerjaDAO.totalAnggaranRapat(tahun, kodeUnit, "Y", "Y");
//                    break;
//                } else if (isRevisi.equalsIgnoreCase("Y") && isSudahDiajukan.equalsIgnoreCase("N")) {
//                    totalAnggaranRapat = perekamanAnggaranBiayaRapatKerjaDAO.totalAnggaranRapat(tahun, kodeUnit, "Y", "N");
//                    break;
//                } else if (isRevisi.equalsIgnoreCase("N") && isSudahDiajukan.equalsIgnoreCase("Y")) {
//                    totalAnggaranRapat = perekamanAnggaranBiayaRapatKerjaDAO.totalAnggaranRapat(tahun, kodeUnit, "N", "Y");
//                    break;
//                } else if (isRevisi.equalsIgnoreCase("N") && isSudahDiajukan.equalsIgnoreCase("N")) {
//                    totalAnggaranRapat = perekamanAnggaranBiayaRapatKerjaDAO.totalAnggaranRapat(tahun, kodeUnit, "N", "N");
//                    break;
//                }
//            }

        }


        double sisaPlafon = totalPlafon - totalAnggaranNonRapat - totalAnggaranRapat;
        txtboxSisaPlafon.setValue(decimalFormat.format(sisaPlafon));


    }

    public void loadLstboxDaftarRapatKerja() throws Exception {
        List<Map> lm = perekamanAnggaranBiayaRapatKerjaDAO.listRapatKerja(lblTahunAnggaran.getValue(), session.getKodeUnit());
        lstboxDaftarRapatKerja.getItems().clear();
        int no = 1;
        for (Map m : lm) {
            Listitem item = new Listitem();
            item.setValue(m);
            item.appendChild(new Listcell("" + no++));
            item.appendChild(new Listcell(ClassAntiNull.AntiNullString(m.get("namaRapatKerja"))));
            item.appendChild(new Listcell(ClassAntiNull.AntiNullString(m.get("jenisRapatKerja"))));
            lstboxDaftarRapatKerja.appendChild(item);
        }

        lstboxDaftarRapatKerja.addEventListener("onSelect", new EventListener() {

            @Override
            public void onEvent(Event arg0) throws Exception {
                Map m = (Map) lstboxDaftarRapatKerja.getSelectedItem().getValue();
                lblKodeRapatKerja.setValue(ClassAntiNull.AntiNullIntString(m.get("idRapatKerjaUnit")));
                lblNamaRapatKerja.setValue(ClassAntiNull.AntiNullString(m.get("namaRapatKerja")));
                lblJenisRapatKerja.setValue(ClassAntiNull.AntiNullString(m.get("jenisRapatKerja")));
                loadLstboxAnggaranBiayaRapatKerjaByRapatKerja();
            }
        });
    }

    public void btnCariPosBiayaOnClick() throws Exception {
        Window windows = (Window) Executions.createComponents("/sippzul/perekamananggaranbiayaunitnonrapatkerja/PopupPosBiaya.zul", this, null);
        Listbox lstboxPosBiaya = (Listbox) windows.getFellow("lstboxPosBiaya");
        String tahunKelompok = perekamanAnggaranBiayaRapatKerjaDAO.tahunKelompokAnggaranYangDigunakan(lblTahunAnggaran.getValue());
        List<Map> lm = perekamanAnggaranBiayaRapatKerjaDAO.listKelompokBiaya(tahunKelompok, txtboxPosBiayaSearch.getValue());

        int index = 1;
        for (Map m : lm) {
            Listitem item = new Listitem();
            item.setValue(m);

            item.appendChild(new Listcell("" + (index++)));
            item.appendChild(new Listcell(ClassAntiNull.AntiNullString(m.get("namaPosBiaya"))));
            lstboxPosBiaya.appendChild(item);

        }


        windows.doModal();
        txtboxPosBiayaSearch.setValue("");
        clear();
        setStatusFromPosBiaya();
    }

    public void setDikunci() throws Exception {
        String isRevisi = "N";
        if (rdAwal.isChecked()) {
            isRevisi = "N";
        } else {
            isRevisi = "Y";
        }
        if (perekamanAnggaranBiayaRapatKerjaDAO.selectIsDikunci(session.getThnAnggaran(), session.getKodeUnit(), isRevisi).equalsIgnoreCase("Y")) {
            btnSimpan.setDisabled(true);
            btnKirim.setDisabled(true);
            isDikunci = true;
        } else {
            btnSimpan.setDisabled(false);
            btnKirim.setDisabled(false);
            isDikunci = false;
        }
    }

    public void btnKirimOnClick() throws Exception {
        String isRevisi = rdAwal.isChecked() ? "N" : "Y";
        String tahun = lblTahunAnggaran.getValue();
        if (rdAwal.isChecked()) {
            List<Map> listMap = perekamanAnggaranBiayaRapatKerjaDAO.listRABNonRapatkerja(tahun, session.getKodeUnit(), "N", "N");
            if (listMap.size() <= 0) {
                Messagebox.show("Anggaran RAB Non Rapat Kerja belum disusun", "Pesan Kesalahan", Messagebox.OK, null);
                return;
            } else {
                int id = 0;
                try {
                    id = Integer.parseInt(lblIdAnggaran.getValue());
                } catch (Exception ex) {
                }
                perekamanAnggaranBiayaRapatKerjaDAO.updateRapatKerja(lblTahunAnggaran.getValue(), session.getKodeUnit(), isRevisi);
                int count = perekamanAnggaranBiayaRapatKerjaDAO.cekKunciAnggaranBiaya(lblTahunAnggaran.getValue(), session.getKodeUnit());

                if (count == 0) {
                    perekamanAnggaranBiayaRapatKerjaDAO.insertKunciAnggaranBiaya(lblTahunAnggaran.getValue(), session.getKodeUnit());
                } else {
                    perekamanAnggaranBiayaRapatKerjaDAO.updateKunciAnggaranBiaya(lblTahunAnggaran.getValue(), session.getKodeUnit());
                }
            }
        } else {
            List<Map> listMap = perekamanAnggaranBiayaRapatKerjaDAO.listRABNonRapatkerja(tahun, session.getKodeUnit(), "Y", "N");
            if (listMap.size() <= 0) {
                Messagebox.show("Anggaran RAB Non Rapat Kerja belum disusun", "Pesan Kesalahan", Messagebox.OK, null);
                return;
            } else {
                int id = 0;
                try {
                    id = Integer.parseInt(lblIdAnggaran.getValue());
                } catch (Exception ex) {
                }
                perekamanAnggaranBiayaRapatKerjaDAO.updateRapatKerja(lblTahunAnggaran.getValue(), session.getKodeUnit(), isRevisi);
                int count = perekamanAnggaranBiayaRapatKerjaDAO.cekKunciAnggaranBiaya(lblTahunAnggaran.getValue(), session.getKodeUnit());

                if (count == 0) {
                    perekamanAnggaranBiayaRapatKerjaDAO.insertKunciAnggaranBiaya(lblTahunAnggaran.getValue(), session.getKodeUnit());
                } else {
                    perekamanAnggaranBiayaRapatKerjaDAO.updateKunciAnggaranBiaya(lblTahunAnggaran.getValue(), session.getKodeUnit());
                }
            }
        }

        isDikunci = true;
        setDikunci();
        clear();
        Messagebox.show("Data telah berhasil di Kirim", "Pesan Informasi", Messagebox.OK, null);
    }

    public void setStatusFromPosBiaya() throws Exception {
        String namaTabelItem = txtboxNamaTableItemPosBiaya.getValue();
        if (namaTabelItem.equalsIgnoreCase("itemBiaya")) {
            btnCariJenis.setDisabled(true);
            txtboxJenisSearch.setDisabled(true);
        } else if (namaTabelItem.equalsIgnoreCase("barang")) {
            btnCariJenis.setDisabled(false);
            txtboxJenisSearch.setDisabled(false);
        } else {
            Messagebox.show("Inputan Salah", "Pesan Kesalahan", Messagebox.OK, null);
            btnCariPosBiaya.setFocus(true);
            btnCariJenis.setDisabled(false);
            txtboxJenisSearch.setDisabled(false);
        }
        txtboxJenisSearch.setValue("");
    }

    public void btnCariItemBiayaOnClick() throws Exception {
        Window windows = (Window) Executions.createComponents("/sippzul/perekamananggaranbiayarapatkerja/PopupItemBiaya.zul", this, null);
        Listbox lstboxItemBiaya = (Listbox) windows.getFellow("lstboxItemBiaya");

        String namaTabelItem = txtboxNamaTableItemPosBiaya.getValue();
        if (namaTabelItem.equalsIgnoreCase("itemBiaya")) {

            List<Map> lm = perekamanAnggaranBiayaRapatKerjaDAO.listNamaItemFromItemBiaya(Integer.parseInt(txtboxIdPosBiaya.getValue()));
            int index = 1;
            for (Map m : lm) {
                Listitem item = new Listitem();
                item.setValue(m);
                item.appendChild(new Listcell("" + (index++)));
                item.appendChild(new Listcell(ClassAntiNull.AntiNullString(m.get("namaItem"))));
                lstboxItemBiaya.appendChild(item);
            }
            windows.doModal();

            List<Map> listDetails = perekamanAnggaranBiayaRapatKerjaDAO.listDetailFromItemBiaya(lblTahunAnggaran.getValue(), ClassAntiNull.AntiNullInt(txtboxIdItemBiaya.getValue()));
            for (Map m : listDetails) {
                lblItemBiaya.setValue(ClassAntiNull.AntiNullString(m.get("namaItem")));
                lblSatuan.setValue(ClassAntiNull.AntiNullString(m.get("satuan")));

                double harga = ClassAntiNull.AntiNullDouble(m.get("harga"));
                if (harga > 0) {
                    txtboxHarga.setValue(harga);
                    txtboxHarga.setDisabled(true);
                } else {
                    txtboxHarga.setValue(harga);
                    txtboxHarga.setDisabled(false);
                }

            }
        } else if (namaTabelItem.equalsIgnoreCase("barang")) {
            List<Map> lm = perekamanAnggaranBiayaRapatKerjaDAO.listDetailBarang(Integer.parseInt(txtboxIdJenis.getValue()), txtboxItemBiayaSearch.getValue());
            int index = 1;
            for (Map m : lm) {
                Listitem item = new Listitem();
                item.setValue(m);
                item.appendChild(new Listcell("" + (index++)));
                item.appendChild(new Listcell(ClassAntiNull.AntiNullString(m.get("namaBarang"))));
                lstboxItemBiaya.appendChild(item);
            }
            windows.doModal();

            List<Map> lmx = perekamanAnggaranBiayaRapatKerjaDAO.listHargaBarang(lblTahunAnggaran.getValue(), Integer.parseInt(txtboxIdItemBiaya.getValue()));
            for (Map m : lmx) {
                txtboxHarga.setValue(ClassAntiNull.AntiNullDouble(m.get("hargaBeliSatuanPerKecil")));
            }

        } else {
            Messagebox.show("namaTabelItem Kosong", "Pesan Kesalahan", Messagebox.OK, null);
            btnCariPosBiaya.setFocus(true);
            btnCariJenis.setDisabled(false);
            txtboxJenisSearch.setDisabled(false);
        }
        txtboxItemBiayaSearch.setValue("");

    }

    public void btnCariJenisOnClick() throws Exception {
        Window windows = (Window) Executions.createComponents("/sippzul/perekamananggaranbiayarapatkerja/PopupJenisBarang.zul", this, null);
        Listbox lstboxJenisBarang = (Listbox) windows.getFellow("lstboxJenisBarang");
        String namaTabelItem = txtboxNamaTableItemPosBiaya.getValue();

        if (namaTabelItem.equalsIgnoreCase("itemBiaya")) {
        } else if (namaTabelItem.equalsIgnoreCase("barang")) {
            List<Map> listMap = new ArrayList<Map>();
            if (txtboxIdPosBiaya.getValue().equalsIgnoreCase("1")) {
                listMap = perekamanAnggaranBiayaRapatKerjaDAO.listDetailJenisBarang(1, txtboxJenisSearch.getValue());
            } else if (txtboxIdPosBiaya.getValue().equalsIgnoreCase("3")) {
                listMap = perekamanAnggaranBiayaRapatKerjaDAO.listDetailJenisBarang(3, txtboxJenisSearch.getValue());
            } else if (txtboxIdPosBiaya.getValue().equalsIgnoreCase("4")) {
                listMap = perekamanAnggaranBiayaRapatKerjaDAO.listDetailJenisBarang(2, txtboxJenisSearch.getValue());
            } else {
            }

            int index = 1;
            for (Map m : listMap) {
                Listitem item = new Listitem();
                item.setValue(m);
                item.appendChild(new Listcell("" + (index++)));
                item.appendChild(new Listcell(ClassAntiNull.AntiNullString(m.get("jenisBarang"))));
                lstboxJenisBarang.appendChild(item);
            }
        } else {
        }

        windows.doModal();
    }

    public void totalOnBlur() throws Exception {
        int jumlahHari = 0;
        double total = 0;
        double harga = 0;
        int kuantitas = 0;

        try {
            kuantitas = txtboxKuantitas.getValue();
            harga = txtboxHarga.getValue();
            if (txtboxJumlahHari.getValue() != null) {
                if (txtboxJumlahHari.getValue() > 0) {
                    jumlahHari = txtboxJumlahHari.getValue();
                    total = harga * kuantitas * jumlahHari;
                } else {
                    total = harga * kuantitas;
                }
            } else {
                total = harga * kuantitas;
            }
        } catch (Exception ex) {
        }
        lblTotalBiaya.setValue(decimalFormat.format(total));

    }

    public void btnSimpanOnClick() throws Exception {
        String tahun = lblTahunAnggaran.getValue();


        String id = lblIdAnggaran.getValue();
        try {
            if (chboxIsUpdate.isChecked()) {
                int idInt = Integer.parseInt(id);

                int kuantitas = txtboxKuantitas.getValue();
                int jumlahHari = txtboxJumlahHari.getValue();
                perekamanAnggaranBiayaRapatKerjaDAO.updateAnggaranBiaya(idInt, kuantitas, jumlahHari);

                txtboxHarga.setDisabled(false);
                btnCariPosBiaya.setDisabled(false);
                btnCariJenis.setDisabled(false);
                btnCariItemBiaya.setDisabled(false);
                loadLstboxAnggaranBiayaRapatKerja();
                loadLstboxAnggaranBiayaRapatKerjaByRapatKerja();
                setSisaPlafon();
                clear();
                chboxIsUpdate.setChecked(false);
                return;
            }
        } catch (NumberFormatException ex) {
        }

        if (lblKodeRapatKerja.getValue().trim().isEmpty()) {
            Messagebox.show("Daftar Rapat Kerja Masih belum dipilih", "Pesan Kesalahan", Messagebox.OK, null);
            lstboxDaftarRapatKerja.setFocus(true);
        }
        int kodeRapatKerjaSubKegiatan = Integer.parseInt(lblKodeRapatKerja.getValue());

        if (txtboxIdPosBiaya.getValue().trim().isEmpty() && !txtboxJenisSearch.isDisabled()) {
            Messagebox.show("Pos Biaya Belum Dipilih", "Pesan Kesalahan", Messagebox.OK, null);
            btnCariPosBiaya.setFocus(true);
        }

        int kodePosBiaya = 0;
        try {
            kodePosBiaya = Integer.parseInt(txtboxIdPosBiaya.getValue());
        } catch (Exception ex) {
        }

        if (txtboxIdItemBiaya.getValue().trim().isEmpty()) {
            Messagebox.show("Item Biaya Belum Dipilih", "Pesan Kesalahan", Messagebox.OK, null);
            txtboxIdItemBiaya.setFocus(true);
        }
        int kodeItemBiayaBarang = Integer.parseInt(txtboxIdItemBiaya.getValue());

        double harga = 0;
        int kuantitas = 0;
        int jumlahHari = 0;
        try {
            harga = txtboxHarga.getValue();
            kuantitas = txtboxKuantitas.getValue();
            jumlahHari = txtboxJumlahHari.getValue();
        } catch (Exception ex) {
        }

        double totalBiaya;
        double sisaPlafon;
        try {
            totalBiaya = decimalFormat.parse(lblTotalBiaya.getValue()).doubleValue();
            sisaPlafon = decimalFormat.parse(txtboxSisaPlafon.getValue()).doubleValue();
        } catch (Exception ex) {
            totalBiaya = 0;
            sisaPlafon = 0;
            ex.printStackTrace();
        }
        if (totalBiaya > 0 && (sisaPlafon - totalBiaya) >= 0) {

            String isRapat = "Y";
            String isRevisi = rdRevisi.isChecked() ? "Y" : "N";


            long cek = perekamanAnggaranBiayaRapatKerjaDAO.cekDetailRapatKerja(tahun, kodeRapatKerjaSubKegiatan, kodePosBiaya, kodeItemBiayaBarang, isRevisi);

            if (cek > 0) {
                Messagebox.show("Data sudah ada", "Pesan Kesalahan", Messagebox.OK, null);
            } else {
                long insertId = perekamanAnggaranBiayaRapatKerjaDAO.insertRapatKerja(tahun, kodeRapatKerjaSubKegiatan, kodePosBiaya, kodeItemBiayaBarang, harga, kuantitas, jumlahHari, isRapat, isRevisi, "N");
                lblIdAnggaran.setValue(Long.toString(insertId));
                Messagebox.show("Data tersimpan", "Pesan Konfirmasi", Messagebox.OK, null);
            }

            loadLstboxAnggaranBiayaRapatKerjaByRapatKerja();
            loadLstboxAnggaranBiayaRapatKerja();
            setSisaPlafon();
            clear();
        } else {
            Messagebox.show("Dana Tidak Mencukupi, Proses Penyimpanan dibatalkan", "Pesan Kesalahan", Messagebox.OK, null);
            return;
        }

    }

    private void loadLstboxAnggaranBiayaRapatKerjaByRapatKerja() throws Exception {
        String isRevisi = rdAwal.isChecked() ? "N" : "Y";
        if (lblKodeRapatKerja.getValue().trim().isEmpty()) {
            return;
        }
        List<Map> listMap = perekamanAnggaranBiayaRapatKerjaDAO.listDetailRapatKerja(session.getThnAnggaran(), session.getKodeUnit(), Integer.parseInt(lblKodeRapatKerja.getValue()), isRevisi);
        double totalAnggaran = 0.0;
        lstboxAnggaranBiayaRapatKerjaByRapatKerja.getItems().clear();
        for (final Map m : listMap) {
            Listitem item = new Listitem();
            item.setValue(m);
            item.appendChild(new Listcell(ClassAntiNull.AntiNullString(m.get("namaPosBiaya"))));

            if (ClassAntiNull.AntiNullString(m.get("namaTabelItem")).equalsIgnoreCase("barang")) {
                Barang brg = brgDAO.select(ClassAntiNull.AntiNullInt(m.get("kodeItemBiayaBarang")));
                item.appendChild(new Listcell(brg.getNamaBarang()));
            } else if (ClassAntiNull.AntiNullString(m.get("namaTabelItem")).equalsIgnoreCase("itemBiaya")) {

                ItemBiaya itemBiaya = itemDAO.select(ClassAntiNull.AntiNullInt(m.get("kodeItemBiayaBarang")));
                item.appendChild(new Listcell(itemBiaya.getNamaItem()));
            }
            item.appendChild(new Listcell(ClassAntiNull.AntiNullDoubleCurrency(m.get("harga"))));
            item.appendChild(new Listcell(ClassAntiNull.AntiNullIntString(m.get("kuantitas"))));
            item.appendChild(new Listcell(ClassAntiNull.AntiNullIntString(m.get("jumlahHari"))));
            item.appendChild(new Listcell(ClassAntiNull.AntiNullDoubleCurrency(m.get("total"))));
            totalAnggaran += ClassAntiNull.AntiNullDouble(m.get("total"));
            final Toolbarbutton toolbarUbah = new Toolbarbutton();
            toolbarUbah.setLabel("[ubah]");
            toolbarUbah.addEventListener("onClick", new EventListener() {

                @Override
                public void onEvent(Event event) throws Exception {
                    lblIdAnggaran.setValue(ClassAntiNull.AntiNullString(m.get("id")));
                    lblPosBiaya.setValue(ClassAntiNull.AntiNullString(m.get("namaPosBiaya")));
                    lblItemBiaya.setValue(ClassAntiNull.AntiNullString(m.get("")));
                    if (ClassAntiNull.AntiNullString(m.get("namaTabelItem")).equalsIgnoreCase("barang")) {
                        Barang brg = brgDAO.select(ClassAntiNull.AntiNullInt(m.get("kodeItemBiayaBarang")));
                        lblItemBiaya.setValue(brg.getNamaBarang());
                    } else if (ClassAntiNull.AntiNullString(m.get("namaTabelItem")).equalsIgnoreCase("itemBiaya")) {
                        ItemBiaya itemBiaya = itemDAO.select(ClassAntiNull.AntiNullInt(m.get("kodeItemBiayaBarang")));
                        lblItemBiaya.setValue(itemBiaya.getNamaItem());
                    }
                    txtboxHarga.setValue(ClassAntiNull.AntiNullDouble(m.get("harga")));
                    txtboxHarga.setDisabled(true);
                    double kuantitas = ClassAntiNull.AntiNullDouble(m.get("kuantitas"));
                    int kuantitasInt = (int) kuantitas;
                    txtboxKuantitas.setValue(kuantitasInt);
                    double jumlahHari = ClassAntiNull.AntiNullDouble(m.get("jumlahHari"));
                    int jumlahHariInt = (int) jumlahHari;
                    totalOnBlur();
                    chboxIsUpdate.setChecked(true);
                    txtboxJumlahHari.setValue(jumlahHariInt);
                    btnCariPosBiaya.setDisabled(true);
                    btnCariJenis.setDisabled(true);
                    btnCariItemBiaya.setDisabled(true);
                }
            });

            final Toolbarbutton toolbarHapus = new Toolbarbutton();
            toolbarHapus.setLabel("[hapus]");
            toolbarHapus.addEventListener("onClick", new EventListener() {

                @Override
                public void onEvent(Event event) throws Exception {

                    if (Messagebox.show("Yakin Akan dihapus", "Pesan Konfirmasi", Messagebox.OK | Messagebox.CANCEL, null) == Messagebox.OK) {
                        perekamanAnggaranBiayaRapatKerjaDAO.hapusAnggaranBiayaRapatKerja(ClassAntiNull.AntiNullInt(m.get("id")));
                        loadLstboxAnggaranBiayaRapatKerjaByRapatKerja();
                        loadLstboxAnggaranBiayaRapatKerja();
                        setSisaPlafon();
                    }
                }
            });
            Hbox buttonBox = new Hbox();
            buttonBox.appendChild(toolbarUbah);
            buttonBox.appendChild(toolbarHapus);
            if (isDikunci) {
                toolbarUbah.setDisabled(true);
                toolbarHapus.setDisabled(true);
            }
            Listcell buttonCell = new Listcell();
            buttonCell.appendChild(buttonBox);
            item.appendChild(buttonCell);
            lstboxAnggaranBiayaRapatKerjaByRapatKerja.appendChild(item);
        }

        txtboxJumlahAnggaran.setValue(decimalFormat.format(totalAnggaran));

    }

    public void btnBatalOnClick() throws Exception {
        clear();

        lblIdAnggaran.setValue("");
        chboxIsUpdate.setChecked(false);
    }

    private void loadLstboxAnggaranBiayaRapatKerja() throws Exception {
        boolean statusPengajuanAwal = rdAwal.isChecked();
        if (statusPengajuanAwal) {
            grpboxAwal.setVisible(true);
            grpboxRevisi.setVisible(false);
            lstboxAnggaranBiayaRapatKerja.getItems().clear();
            List<Map> listMap = perekamanAnggaranBiayaRapatKerjaDAO.listDetailRapatKerja(session.getThnAnggaran(), session.getKodeUnit(), "N");
            double totalAnggaran = 0.0;
            for (Map m : listMap) {
                Listitem item = new Listitem();
                item.setValue(m);
                item.appendChild(new Listcell(ClassAntiNull.AntiNullString(m.get("namaRapatKerja"))));
                item.appendChild(new Listcell(ClassAntiNull.AntiNullString(m.get("namaPosBiaya"))));
                if (ClassAntiNull.AntiNullString(m.get("namaTabelItem")).equalsIgnoreCase("barang")) {
                    Barang brg = brgDAO.select(ClassAntiNull.AntiNullInt(m.get("kodeItemBiayaBarang")));
                    item.appendChild(new Listcell(brg.getNamaBarang()));
                } else if (ClassAntiNull.AntiNullString(m.get("namaTabelItem")).equalsIgnoreCase("itemBiaya")) {

                    ItemBiaya itemBiaya = itemDAO.select(ClassAntiNull.AntiNullInt(m.get("kodeItemBiayaBarang")));
                    item.appendChild(new Listcell(itemBiaya.getNamaItem()));
                }
                item.appendChild(new Listcell(ClassAntiNull.AntiNullDoubleCurrency(m.get("harga"))));
                item.appendChild(new Listcell(ClassAntiNull.AntiNullIntString(m.get("kuantitas"))));
                item.appendChild(new Listcell(ClassAntiNull.AntiNullIntString(m.get("jumlahHari"))));
                item.appendChild(new Listcell(ClassAntiNull.AntiNullDoubleCurrency(m.get("total"))));
                totalAnggaran += ClassAntiNull.AntiNullDouble(m.get("total"));

                lstboxAnggaranBiayaRapatKerja.appendChild(item);
            }

            txtboxTotalAnggaranBiayaRapatKerja.setValue(decimalFormat.format(totalAnggaran));
        } else {
            grpboxAwal.setVisible(false);
            grpboxRevisi.setVisible(true);
            lstboxAnggaranBiayaRapatKerjaRevisi.getItems().clear();
            List<Map> listMapRevisi = perekamanAnggaranBiayaRapatKerjaDAO.listDetailRapatKerja(session.getThnAnggaran(), session.getKodeUnit(), "Y");
            double totalAnggaran = 0.0;
            for (Map m : listMapRevisi) {
                Listitem item = new Listitem();
                item.setValue(m);
                item.appendChild(new Listcell(ClassAntiNull.AntiNullString(m.get("namaRapatKerja"))));
                item.appendChild(new Listcell(ClassAntiNull.AntiNullString(m.get("namaPosBiaya"))));
                if (ClassAntiNull.AntiNullString(m.get("namaTabelItem")).equalsIgnoreCase("barang")) {
                    Barang brg = brgDAO.select(ClassAntiNull.AntiNullInt(m.get("kodeItemBiayaBarang")));
                    item.appendChild(new Listcell(brg.getNamaBarang()));
                } else if (ClassAntiNull.AntiNullString(m.get("namaTabelItem")).equalsIgnoreCase("itemBiaya")) {

                    ItemBiaya itemBiaya = itemDAO.select(ClassAntiNull.AntiNullInt(m.get("kodeItemBiayaBarang")));
                    item.appendChild(new Listcell(itemBiaya.getNamaItem()));
                }
                item.appendChild(new Listcell(ClassAntiNull.AntiNullDoubleCurrency(m.get("harga"))));
                item.appendChild(new Listcell(ClassAntiNull.AntiNullIntString(m.get("kuantitas"))));
                item.appendChild(new Listcell(ClassAntiNull.AntiNullIntString(m.get("jumlahHari"))));
                item.appendChild(new Listcell(ClassAntiNull.AntiNullDoubleCurrency(m.get("total"))));
                totalAnggaran += ClassAntiNull.AntiNullDouble(m.get("total"));

                lstboxAnggaranBiayaRapatKerjaRevisi.appendChild(item);
            }

            txtboxTotalAnggaranBiayaRapatKerjaRevisi.setValue(decimalFormat.format(totalAnggaran));

            lstboxAnggaranBiayaRapatKerjaAwal.getItems().clear();
            List<Map> listMapAwal = perekamanAnggaranBiayaRapatKerjaDAO.listDetailRapatKerja(session.getThnAnggaran(), session.getKodeUnit(), "N");
            double totalAnggaranAwal = 0.0;
            for (Map m : listMapAwal) {
                Listitem item = new Listitem();
                item.setValue(m);
                item.appendChild(new Listcell(ClassAntiNull.AntiNullString(m.get("namaRapatKerja"))));
                item.appendChild(new Listcell(ClassAntiNull.AntiNullString(m.get("namaPosBiaya"))));
                if (ClassAntiNull.AntiNullString(m.get("namaTabelItem")).equalsIgnoreCase("barang")) {
                    Barang brg = brgDAO.select(ClassAntiNull.AntiNullInt(m.get("kodeItemBiayaBarang")));
                    item.appendChild(new Listcell(brg.getNamaBarang()));
                } else if (ClassAntiNull.AntiNullString(m.get("namaTabelItem")).equalsIgnoreCase("itemBiaya")) {

                    ItemBiaya itemBiaya = itemDAO.select(ClassAntiNull.AntiNullInt(m.get("kodeItemBiayaBarang")));
                    item.appendChild(new Listcell(itemBiaya.getNamaItem()));
                }
                item.appendChild(new Listcell(ClassAntiNull.AntiNullDoubleCurrency(m.get("harga"))));
                item.appendChild(new Listcell(ClassAntiNull.AntiNullIntString(m.get("kuantitas"))));
                item.appendChild(new Listcell(ClassAntiNull.AntiNullIntString(m.get("jumlahHari"))));
                item.appendChild(new Listcell(ClassAntiNull.AntiNullDoubleCurrency(m.get("total"))));
                totalAnggaranAwal += ClassAntiNull.AntiNullDouble(m.get("total"));

                lstboxAnggaranBiayaRapatKerjaAwal.appendChild(item);
            }

            txtboxTotalAnggaranBiayaRapatKerjaAwal.setValue(decimalFormat.format(totalAnggaranAwal));
        }
    }
}
